/*
 * Title: 团队队列（Team Queue）
 * Author: Yuanshun L
 * Created : 09-otc-2021
 */

#include<iostream>
#include<queue>
#include<map>
#include<string>
#include<cstdio>
using namespace std;

#define num  3
map<int,int> nav; // 成员编号到团队编号的映射
queue<int> q1[num];
queue<int> q2;


int main() {
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);

    int n,no,to;
    cin>>n; // 成员的数量
    while(n--){
        cin>>no>>to; // 成员编号和团队编号（0-2）
        nav[no] = to;
    }

    // 变量map，注意获取多个值的方法
    for(map<int,int>::iterator it=nav.begin();it!=nav.end();it++){
        cout<<it->first<<":"<<it->second<<" ";
    }
    cout<<endl;

    // 输入指令和执行操作
    string cmd;
    for(;;){
        cin>>cmd;
        // 暂停
        if(cmd[0]=='S') break;
        // 编号为no的成员进入长队
        if(cmd[0]=='E'){
            cin>>no;
            to = nav[no];
            if(q1[to].empty()) // 所在团队没有入列
                q2.push(to);
            q1[to].push(no);
        }
        // 长队的队首出列
        if(cmd[0]=='D'){
            if(q2.empty()) continue;
            to = q2.front(); // 找到所属团队编号
            cout << q1[to].front()<<" ";
            q1[to].pop(); // 队首出列
            if(q1[to].empty()) // 该团队变为空，需要出列
                q2.pop();
        }
    }

    return 0;
}